package com.fch.sdlibrary.util;

import android.content.Context;
import android.content.ContextWrapper;
import android.content.SharedPreferences;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

import static android.content.Context.MODE_PRIVATE;

public class TokenInterceptor extends ContextWrapper implements Interceptor {
    public TokenInterceptor(Context base) {
        super(base);
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        //同步请求方获取最新的Token
        String newToken = getNewToken();
        //使用新的Token，创建新的请求
        Request newRequest = chain.request()
                .newBuilder()
                .header("token", newToken)
                .build();
        //重新请求
        return chain.proceed(newRequest);
    }



    /**
     * 根据Response，判断Token是否失效
     */
    private boolean isTokenExpired(Response response) {
        if (response.code() == 401) {
            return true;
        }
        return false;
    }

    /**
     * 同步请求方式，获取最新的Token
     * 此处需考虑并发问题，多请求时可能同时去刷新token导致刚获取的token马上失效
     */
    private synchronized String getNewToken() throws IOException {
        // 通过获取token的接口，同步请求接口
        SharedPreferences userInfo = getSharedPreferences("data", MODE_PRIVATE);
        String newToken = userInfo.getString("token", "");
        return newToken;
    }

}
